SQL Serverの復旧状態
from SQL Serverのバックアップ・リストア仕様
1. RECOVERY(デフォルトの復旧状態)
リストア後にデータベースが完全復旧した状態
この後は差分バックアップやトランザクションログバックアップを実行できない
最後のバックアップを復元するときにこのオプション(RESTORE WITH RECOVERY)を使う
完全復旧モデルまたは一括ログ復旧モデルでは、すべてのログファイルを復元する場合にのみこのオプションを選択してください。
2. NORECOVERY(復旧中の状態)
まだリストアすべきバックアップがある状態
復元しています…状態がこれっぽい
復旧中の状態になり「ユーザーが接続できないようにブロックする」ようになる
データの不整合が起こらないためにブロックしている、のはなんとなく理解できるのだが…
復元「元」のデータベースがブロックのはめちゃくちゃ焦る
ログ末尾のバックアップがよくわかっていないから困ってるんだと思う
データベースを復旧するには、RESTORE WITH RECOVERYオプションを使用して復元操作を実行する必要があります。
3. STANDBY(スタンバイ状態)
NORECOVERYとほぼ同じで、selectのみ実行可能な状態
データベースを復旧するには、復元されるデータセット全体(ロールフォワードセット)とデータベースの間で一貫性が保たれている必要がある
検証: リストアの正常パターンの正常系を見てみると概ね合っていそう
完全、差分、ログ…とrestorehistoryテーブルのrecovery列はnorecoveryで続いている
最後のログをリストアした履歴のみrecoveryになっている
イコール、復旧完了ということか
現在のデータベースの復旧状態が知りたい
前述の通り、復元しています…で終わっていると焦る
初めてやったときヒヤリハット
sys.databasesのstateでRESTORINGになっていることを見るくらいしかないのかな
復旧完了状態に戻したい
復元しています…を解消するSQL
参考
SQL Server でのリストア時の復旧状態オプション - matu_tak’s blog
RESTORE (Transact-SQL) - SQL Server | Microsoft Learn
データベースの復元 (オプション ページ) - SQL Server | Microsoft Learn
SQL Server データベースを特定の時点に復元する方法 (完全復旧モデル) - SQL Server | Microsoft Learn
SQL Server データベースを復元しています (Restoring...) 状態から元に戻す方法 - SQL Server&T-SQLに関するコラム - SQL Server 入門